package edu.nf.ch08.interceptor;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * @author wangl
 * @date 2025/5/14
 * 自定义拦截器
 * 需要实现HandlerInterceptor
 */
public class LoginInterceptor implements HandlerInterceptor {

    /**
     * 在控制器（Controller）方法调用之前
     * @param request
     * @param response
     * @param handler
     * @return 返回值是一个boolean类型，true表示放行请求，
     *         false表示拒绝，请求将不会到达控制器方法
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle...");
        //如果是预检请求就直接放行
        if("OPTIONS".equals(request.getMethod())) {
            return true;
        }
        return true;
    }

    /**
     * 在控制器方法调用之后，视图渲染之前执行
     * 前提条件:preHandle返回true才会执行
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle...");
    }

    /**
     * 整个请求处理完成后（视图渲染完毕）
     * 前提条件:preHandle返回true才会执行
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion...");
    }
}